package com.dbh.alg.algorithm.sort;

import java.util.Arrays;

/**
 * 插入排序
 *
 * @author dongbanghui
 * @date 2020/05/03
 */
public class InsertSort {

    /**
     * 插入排序
     * @param arr
     * @param n
     */
    public static void insertSort(int[] arr, int n){
        for (int i = 1; i < n; i++){
            for (int j = i; j > 0 && arr[j] < arr[j-1]; j--){
                int temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
            }
        }
    }

    /**
     * 插入排序（优化版）-- 把交换更换位赋值
     * @param arr
     * @param n
     */
    public static void insertSort2(int[] arr, int n){
        for (int i = 1; i < n; i++){
            //寻找元素arr[i]合适的插入位置
            int e = arr[i];
            //j保存元素e应该插入的位置
            int j;
            for (j = i; j > 0 && arr[j-1] > e; j--){
                arr[j] = arr[j-1];
            }
            arr[j] = e;
        }
    }

    public static void main(String[] args) {
        int[] arr = {2,6,1,9,0,8,7,5};
        insertSort2(arr, arr.length);
        System.out.println(Arrays.toString(arr));
    }

}
